/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.appschool.action;

import br.com.appschool.dao.DisciplinaDAO;
import br.com.appschool.dao.DisponibilidadeDAO;
import br.com.appschool.dao.ProfessorDAO;
import br.com.appschool.model.Disciplina;
import br.com.appschool.model.Disponibilidade;
import br.com.appschool.model.Professor;
import br.com.appschool.srv.DisponibilidadeSV;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author joaopaulo
 */
public class DisponibilidadeAction {
    
        public void execute(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


        String action = request.getParameter("action");

        if (action.equals("novo")) {
            request.setAttribute("objDisponibilidade", new Disponibilidade());
            request.getRequestDispatcher("cadastroDisponibilidade.jsp").forward(request, response);
            return;
        }
        if (action.equals("listar")) {
            try {
                request.setAttribute("lstDisponibilidades", new DisponibilidadeDAO().findAll("Disponibilidade", "nome"));
                request.getRequestDispatcher("lstdisponibilidade.jsp").forward(request, response);
            } catch (Exception ex) {
                Logger.getLogger(DisponibilidadeSV.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (action.equals("salvar")) {
            if (this.save(request)) {
                request.setAttribute("msg", "Operacao realizada com sucesso!");
            } else {
                request.setAttribute("msg", "Erro ao realizar a operação!");
            }

            request.setAttribute("objDisponibilidade", new Disponibilidade());
            request.getRequestDispatcher("cadastroDisponibilidade.jsp").forward(request, response);
            return;
        }
        if (action.equals("excluir")) {
            try {

                int id = Integer.parseInt(request.getParameter("codigo"));
                new DisponibilidadeDAO().delete(Disponibilidade.class, id);

                request.setAttribute("lstDisponibilidades", new DisponibilidadeDAO().findAll("Disponibilidade", "nome"));
                request.getRequestDispatcher("lstdisponibilidade.jsp").forward(request, response);

            } catch (Exception ex) {
                Logger.getLogger(DisponibilidadeSV.class.getName()).log(Level.SEVERE, null, ex);
            }
            return;
        }


        if (action.equals("editar")) {
            try {
                int id = Integer.parseInt(request.getParameter("codigo"));

                request.setAttribute("objDisponibilidade", new DisponibilidadeDAO().findById(Disponibilidade.class, id));
                request.getRequestDispatcher("cadastroDisponibilidade.jsp").forward(request, response);

            } catch (Exception ex) {
                Logger.getLogger(DisponibilidadeSV.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }

    private boolean save(HttpServletRequest request) {

        Disponibilidade disponibilidade = new Disponibilidade();
        int idDisciplina = Integer.parseInt(request.getParameter("idDisciplina"));
        int idProfessor = Integer.parseInt(request.getParameter("idProfessor"));
        
        
        disponibilidade.setId(Integer.parseInt(request.getParameter("id")));
        disponibilidade.setDiaSemana(request.getParameter("diaSemana"));
        disponibilidade.setHorario(Integer.parseInt(request.getParameter("horario")));
        disponibilidade.setIdDisciplina(new DisciplinaDAO().findById(Disciplina.class, idDisciplina));
        disponibilidade.setIdProfessor(new ProfessorDAO().findById(Professor.class, idProfessor));

        try {
            if (disponibilidade.getId() == 0) {
                return new DisponibilidadeDAO().create(disponibilidade);
            } else {
                return new DisponibilidadeDAO().update(disponibilidade);
            }
        } catch (Exception error) {
            return false;
        }
    }

}
